//+------------------------------------------------------------------+ //| Original Indicator Auto-Pivot Plotter Labels.mq4 Elton Treloar | //| I called this one Pivot Point S&R + GMT correction | //| and was made by Linuxser | //| Thanks to Rosh form metaquotes forum for fix the redraw problem | //+------------------------------------------------------------------+ #property copyright "" #property link "" #define IND_NAME "Pivot Point S&R" #property indicator_chart_window #property indicator_buffers 7 #property indicator_color1 LimeGreen #property indicator_color2 Blue #property indicator_color3 Red #property indicator_color4 Blue #property indicator_color5 Red #property indicator_color6 Blue #property indicator_color7 Red //---- input parameters extern int StartHour=0; extern int StartMinute=0; extern int DaysToPlot=15; extern color SupportLabelColor=DodgerBlue; extern color ResistanceLabelColor=OrangeRed; extern color PivotLabelColor=Green; extern int fontsize=8; extern int LabelShift = 0; //---- buffers double R3Buffer[]; double R2Buffer[]; double R1Buffer[]; double PBuffer[]; double S1Buffer[]; double S2Buffer[]; double S3Buffer[]; string Pivot="Pivot",Sup1="S 1", Res1="R 1"; string Sup2="S 2", Res2="R 2", Sup3="S 3", Res3="R 3"; datetime LabelShiftTime; double P,S1,R1,S2,R2,S3,R3; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE,0,2); SetIndexStyle(1,DRAW_LINE,0,2); SetIndexStyle(2,DRAW_LINE,0,2); SetIndexStyle(3,DRAW_LINE,0,2); SetIndexStyle(4,DRAW_LINE,0,2); SetIndexStyle(5,DRAW_LINE,0,2); SetIndexStyle(6,DRAW_LINE,0,2); SetIndexBuffer(0,PBuffer); SetIndexBuffer(1,S1Buffer); SetIndexBuffer(2,R1Buffer); SetIndexBuffer(3,S2Buffer); SetIndexBuffer(4,R2Buffer); SetIndexBuffer(5,S3Buffer); SetIndexBuffer(6,R3Buffer); IndicatorShortName(IND_NAME); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete("Res3"); ObjectDelete("Res2"); ObjectDelete("Res1"); ObjectDelete("Pivot"); ObjectDelete("Sup1"); ObjectDelete("Sup2"); ObjectDelete("Sup3"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- exit if period is greater than daily charts if(Period() > 240) { Print("Error - Chart period is greater than 1 day."); return(-1); // then exit } //---- indicator calculation { if (counted_bars==0) if(counted_bars<0) return(-1); //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; } // int limit=Bars-counted_bars; int limit=2000; int StartMinutesIntoDay=(StartHour*60)+StartMinute; // 8' o'clock x 60 = 480 int CloseMinutesIntoDay=StartMinutesIntoDay-Period(); // // **************************************************** // Check That cloes time isn't now a negative number. // Correct if it is by adding a full day's worth // of minutes. // **************************************************** if (CloseMinutesIntoDay<0) { CloseMinutesIntoDay=CloseMinutesIntoDay+1440; } // **************************************************** // Establish the nuber of bars in a day. // **************************************************** int BarsInDay=1440/Period(); // ****************************************************************************************** // ****************************************************************************************** // Main Loop // ****************************************************************************************** // ****************************************************************************************** for(int i=0; iPreviousHigh) PreviousHigh=High[SearchHighLow]; if (Low[SearchHighLow]0) { for (int SearchCount=SuggestedBar ;SearchCount>(SuggestedBar-DeltaBarFound-2) ;SearchCount--) { // ****************************************************************************** // Find time (in minutes) of the current bar AND the two bars either side of it. // This is done to allow for any missing bars in the data. i.e. If THE bar you // were after were to be missing you'd never get a valid close/open time. // This is the same reason for searching rather than just looking back a certain // number of bars from the close time. Missing bars upset the count back and // screw up all pivot calculations. There is still room for error but it's improved. // The best calculations will come from having the best data. ...of course. :) // ****************************************************************************** // int PreviousBarsTime=(TimeHour(Time[SearchCount+1])*60)+TimeMinute(Time[SearchCount+1]); int CurrentBarsTime=(TimeHour(Time[SearchCount])*60)+TimeMinute(Time[SearchCount]); int NextBarsTime=(TimeHour(Time[SearchCount-1])*60)+TimeMinute(Time[SearchCount-1]); if (CurrentBarsTime==TimeToLookFor) { return(SearchCount); // *** If current bar is what we are after than lets get out. // *** without mucking about with the rest of the checks. } // ********************************** // Check that previous bar doesn't // lay on a different day. // Adjust if it is // ********************************** if(PreviousBarsTime>CurrentBarsTime) { PreviousBarsTime=PreviousBarsTime-1440; } // ********************************** // Check that following bar doesn't // lay on a different day. // Adjust if it is. // ********************************** if(NextBarsTime